;
var swfobject = function () {
	var aq = "undefined",
		aD = "object",
		ab = "Shockwave Flash",
		X = "ShockwaveFlash.ShockwaveFlash",
		aE = "application/x-shockwave-flash",
		ac = "SWFObjectExprInst",
		ax = "onreadystatechange",
		af = window,
		aL = document,
		aB = navigator,
		aa = false,
		Z = [aN],
		aG = [],
		ag = [],
		al = [],
		aJ,
		ad,
		ap,
		at,
		ak = false,
		aU = false,
		aH,
		an,
		aI = true,
		ah = function () {
			var a = typeof aL.getElementById != aq && typeof aL.getElementsByTagName != aq && typeof aL.createElement != aq,
				e = aB.userAgent.toLowerCase(),
				c = aB.platform.toLowerCase(),
				h = c ? /win/.test( c ) : /win/.test( e ),
				j = c ? /mac/.test( c ) : /mac/.test( e ),
				g = /webkit/.test( e ) ? parseFloat( e.replace( /^.*webkit\/(\d+(\.\d+)?).*$/, "$1" ) ) : false,
				d = !+"\v1",
				f = [0, 0, 0],
				k = null;
			if ( typeof aB.plugins != aq && typeof aB.plugins[ab] == aD ) {
				k = aB.plugins[ab].description;
				if ( k && !(typeof aB.mimeTypes != aq && aB.mimeTypes[aE] && !aB.mimeTypes[aE].enabledPlugin) ) {
					aa = true;
					d = false;
					k = k.replace( /^.*\s+(\S+\s+\S+$)/, "$1" );
					f[0] = parseInt( k.replace( /^(.*)\..*$/, "$1" ), 10 );
					f[1] = parseInt( k.replace( /^.*\.(.*)\s.*$/, "$1" ), 10 );
					f[2] = /[a-zA-Z]/.test( k ) ? parseInt( k.replace( /^.*[a-zA-Z]+(.*)$/, "$1" ), 10 ) : 0
				}
			} else {
				if ( typeof af.ActiveXObject != aq ) {
					try {
						var i = new ActiveXObject( X );
						if ( i ) {
							k = i.GetVariable( "$version" );
							if ( k ) {
								d = true;
								k = k.split( " " )[1].split( "," );
								f = [parseInt( k[0], 10 ), parseInt( k[1], 10 ), parseInt( k[2], 10 )]
							}
						}
					} catch ( b ) {
					}
				}
			}
			return {
				w3:a,
				pv:f,
				wk:g,
				ie:d,
				win:h,
				mac:j
			}
		}(),
		aK = function () {
			if ( !ah.w3 ) {
				return
			}
			if ( (typeof aL.readyState != aq && aL.readyState == "complete") || (typeof aL.readyState == aq && (aL.getElementsByTagName( "body" )[0] || aL.body)) ) {
				aP()
			}
			if ( !ak ) {
				if ( typeof aL.addEventListener != aq ) {
					aL.addEventListener( "DOMContentLoaded", aP, false )
				}
				if ( ah.ie && ah.win ) {
					aL.attachEvent( ax,
						function () {
							if ( aL.readyState == "complete" ) {
								aL.detachEvent( ax, arguments.callee );
								aP()
							}
						} );
					if ( af == top ) {
						(function () {
							if ( ak ) {
								return
							}
							try {
								aL.documentElement.doScroll( "left" )
							} catch ( a ) {
								setTimeout( arguments.callee, 0 );
								return
							}
							aP()
						})()
					}
				}
				if ( ah.wk ) {
					(function () {
						if ( ak ) {
							return
						}
						if ( !/loaded|complete/.test( aL.readyState ) ) {
							setTimeout( arguments.callee, 0 );
							return
						}
						aP()
					})()
				}
				aC( aP )
			}
		}();

	function aP() {
		if ( ak ) {
			return
		}
		try {
			var b = aL.getElementsByTagName( "body" )[0].appendChild( ar( "span" ) );
			b.parentNode.removeChild( b )
		} catch ( a ) {
			return
		}
		ak = true;
		var d = Z.length;
		for ( var c = 0; c < d; c++ ) {
			Z[c]()
		}
	}

	function aj( a ) {
		if ( ak ) {
			a()
		} else {
			Z[Z.length] = a
		}
	}

	function aC( a ) {
		if ( typeof af.addEventListener != aq ) {
			af.addEventListener( "load", a, false )
		} else {
			if ( typeof aL.addEventListener != aq ) {
				aL.addEventListener( "load", a, false )
			} else {
				if ( typeof af.attachEvent != aq ) {
					aM( af, "onload", a )
				} else {
					if ( typeof af.onload == "function" ) {
						var b = af.onload;
						af.onload = function () {
							b();
							a()
						}
					} else {
						af.onload = a
					}
				}
			}
		}
	}

	function aN() {
		if ( aa ) {
			Y()
		} else {
			am()
		}
	}

	function Y() {
		var d = aL.getElementsByTagName( "body" )[0];
		var b = ar( aD );
		b.setAttribute( "type", aE );
		var a = d.appendChild( b );
		if ( a ) {
			var c = 0;
			(function () {
				if ( typeof a.GetVariable != aq ) {
					var e = a.GetVariable( "$version" );
					if ( e ) {
						e = e.split( " " )[1].split( "," );
						ah.pv = [parseInt( e[0], 10 ), parseInt( e[1], 10 ), parseInt( e[2], 10 )]
					}
				} else {
					if ( c < 10 ) {
						c++;
						setTimeout( arguments.callee, 10 );
						return
					}
				}
				d.removeChild( b );
				a = null;
				am()
			})()
		} else {
			am()
		}
	}

	function am() {
		var g = aG.length;
		if ( g > 0 ) {
			for ( var h = 0; h < g; h++ ) {
				var c = aG[h].id;
				var l = aG[h].callbackFn;
				var a = {
					success:false,
					id:c
				};
				if ( ah.pv[0] > 0 ) {
					var i = aS( c );
					if ( i ) {
						if ( ao( aG[h].swfVersion ) && !(ah.wk && ah.wk < 312) ) {
							ay( c, true );
							if ( l ) {
								a.success = true;
								a.ref = av( c );
								l( a )
							}
						} else {
							if ( aG[h].expressInstall && au() ) {
								var e = {};
								e.data = aG[h].expressInstall;
								e.width = i.getAttribute( "width" ) || "0";
								e.height = i.getAttribute( "height" ) || "0";
								if ( i.getAttribute( "class" ) ) {
									e.styleclass = i.getAttribute( "class" )
								}
								if ( i.getAttribute( "align" ) ) {
									e.align = i.getAttribute( "align" )
								}
								var f = {};
								var d = i.getElementsByTagName( "param" );
								var k = d.length;
								for ( var j = 0; j < k; j++ ) {
									if ( d[j].getAttribute( "name" ).toLowerCase() != "movie" ) {
										f[d[j].getAttribute( "name" )] = d[j].getAttribute( "value" )
									}
								}
								ae( e, f, c, l )
							} else {
								aF( i );
								if ( l ) {
									l( a )
								}
							}
						}
					}
				} else {
					ay( c, true );
					if ( l ) {
						var b = av( c );
						if ( b && typeof b.SetVariable != aq ) {
							a.success = true;
							a.ref = b
						}
						l( a )
					}
				}
			}
		}
	}

	function av( b ) {
		var d = null;
		var c = aS( b );
		if ( c && c.nodeName == "OBJECT" ) {
			if ( typeof c.SetVariable != aq ) {
				d = c
			} else {
				var a = c.getElementsByTagName( aD )[0];
				if ( a ) {
					d = a
				}
			}
		}
		return d
	}

	function au() {
		return !aU && ao( "6.0.65" ) && (ah.win || ah.mac) && !(ah.wk && ah.wk < 312)
	}

	function ae( f, d, h, e ) {
		aU = true;
		ap = e || null;
		at = {
			success:false,
			id:h
		};
		var a = aS( h );
		if ( a ) {
			if ( a.nodeName == "OBJECT" ) {
				aJ = aO( a );
				ad = null
			} else {
				aJ = a;
				ad = h
			}
			f.id = ac;
			if ( typeof f.width == aq || (!/%$/.test( f.width ) && parseInt( f.width, 10 ) < 310) ) {
				f.width = "310"
			}
			if ( typeof f.height == aq || (!/%$/.test( f.height ) && parseInt( f.height, 10 ) < 137) ) {
				f.height = "137"
			}
			aL.title = aL.title.slice( 0, 47 ) + " - Flash Player Installation";
			var b = ah.ie && ah.win ? "ActiveX" : "PlugIn",
				c = "MMredirectURL=" + af.location.toString().replace( /&/g, "%26" ) + "&MMplayerType=" + b + "&MMdoctitle=" + aL.title;
			if ( typeof d.flashvars != aq ) {
				d.flashvars += "&" + c
			} else {
				d.flashvars = c
			}
			if ( ah.ie && ah.win && a.readyState != 4 ) {
				var g = ar( "div" );
				h += "SWFObjectNew";
				g.setAttribute( "id", h );
				a.parentNode.insertBefore( g, a );
				a.style.display = "none";
				(function () {
					if ( a.readyState == 4 ) {
						a.parentNode.removeChild( a )
					} else {
						setTimeout( arguments.callee, 10 )
					}
				})()
			}
			aA( f, d, h )
		}
	}

	function aF( a ) {
		if ( ah.ie && ah.win && a.readyState != 4 ) {
			var b = ar( "div" );
			a.parentNode.insertBefore( b, a );
			b.parentNode.replaceChild( aO( a ), b );
			a.style.display = "none";
			(function () {
				if ( a.readyState == 4 ) {
					a.parentNode.removeChild( a )
				} else {
					setTimeout( arguments.callee, 10 )
				}
			})()
		} else {
			a.parentNode.replaceChild( aO( a ), a )
		}
	}

	function aO( b ) {
		var d = ar( "div" );
		if ( ah.win && ah.ie ) {
			d.innerHTML = b.innerHTML
		} else {
			var e = b.getElementsByTagName( aD )[0];
			if ( e ) {
				var a = e.childNodes;
				if ( a ) {
					var f = a.length;
					for ( var c = 0; c < f; c++ ) {
						if ( !(a[c].nodeType == 1 && a[c].nodeName == "PARAM") && !(a[c].nodeType == 8) ) {
							d.appendChild( a[c].cloneNode( true ) )
						}
					}
				}
			}
		}
		return d
	}

	function aA( e, g, c ) {
		var d,
			a = aS( c );
		if ( ah.wk && ah.wk < 312 ) {
			return d
		}
		if ( a ) {
			if ( typeof e.id == aq ) {
				e.id = c
			}
			if ( ah.ie && ah.win ) {
				var f = "";
				for ( var i in e ) {
					if ( e[i] != Object.prototype[i] ) {
						if ( i.toLowerCase() == "data" ) {
							g.movie = e[i]
						} else {
							if ( i.toLowerCase() == "styleclass" ) {
								f += ' class="' + e[i] + '"'
							} else {
								if ( i.toLowerCase() != "classid" ) {
									f += " " + i + '="' + e[i] + '"'
								}
							}
						}
					}
				}
				var h = "";
				for ( var j in g ) {
					if ( g[j] != Object.prototype[j] ) {
						h += '<param name="' + j + '" value="' + g[j] + '" />'
					}
				}
				a.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + f + ">" + h + "</object>";
				ag[ag.length] = e.id;
				d = aS( e.id )
			} else {
				var b = ar( aD );
				b.setAttribute( "type", aE );
				for ( var k in e ) {
					if ( e[k] != Object.prototype[k] ) {
						if ( k.toLowerCase() == "styleclass" ) {
							b.setAttribute( "class", e[k] )
						} else {
							if ( k.toLowerCase() != "classid" ) {
								b.setAttribute( k, e[k] )
							}
						}
					}
				}
				for ( var l in g ) {
					if ( g[l] != Object.prototype[l] && l.toLowerCase() != "movie" ) {
						aQ( b, l, g[l] )
					}
				}
				a.parentNode.replaceChild( b, a );
				d = b
			}
		}
		return d
	}

	function aQ( b, d, c ) {
		var a = ar( "param" );
		a.setAttribute( "name", d );
		a.setAttribute( "value", c );
		b.appendChild( a )
	}

	function aw( a ) {
		var b = aS( a );
		if ( b && b.nodeName == "OBJECT" ) {
			if ( ah.ie && ah.win ) {
				b.style.display = "none";
				(function () {
					if ( b.readyState == 4 ) {
						aT( a )
					} else {
						setTimeout( arguments.callee, 10 )
					}
				})()
			} else {
				b.parentNode.removeChild( b )
			}
		}
	}

	function aT( a ) {
		var b = aS( a );
		if ( b ) {
			for ( var c in b ) {
				if ( typeof b[c] == "function" ) {
					b[c] = null
				}
			}
			b.parentNode.removeChild( b )
		}
	}

	function aS( a ) {
		var c = null;
		try {
			c = aL.getElementById( a )
		} catch ( b ) {
		}
		return c
	}

	function ar( a ) {
		return aL.createElement( a )
	}

	function aM( a, c, b ) {
		a.attachEvent( c, b );
		al[al.length] = [a, c, b]
	}

	function ao( a ) {
		var b = ah.pv,
			c = a.split( "." );
		c[0] = parseInt( c[0], 10 );
		c[1] = parseInt( c[1], 10 ) || 0;
		c[2] = parseInt( c[2], 10 ) || 0;
		return (b[0] > c[0] || (b[0] == c[0] && b[1] > c[1]) || (b[0] == c[0] && b[1] == c[1] && b[2] >= c[2])) ? true : false
	}

	function az( b, f, a, c ) {
		if ( ah.ie && ah.mac ) {
			return
		}
		var e = aL.getElementsByTagName( "head" )[0];
		if ( !e ) {
			return
		}
		var g = (a && typeof a == "string") ? a : "screen";
		if ( c ) {
			aH = null;
			an = null
		}
		if ( !aH || an != g ) {
			var d = ar( "style" );
			d.setAttribute( "type", "text/css" );
			d.setAttribute( "media", g );
			aH = e.appendChild( d );
			if ( ah.ie && ah.win && typeof aL.styleSheets != aq && aL.styleSheets.length > 0 ) {
				aH = aL.styleSheets[aL.styleSheets.length - 1]
			}
			an = g
		}
		if ( ah.ie && ah.win ) {
			if ( aH && typeof aH.addRule == aD ) {
				aH.addRule( b, f )
			}
		} else {
			if ( aH && typeof aL.createTextNode != aq ) {
				aH.appendChild( aL.createTextNode( b + " {" + f + "}" ) )
			}
		}
	}

	function ay( a, c ) {
		if ( !aI ) {
			return
		}
		var b = c ? "visible" : "hidden";
		if ( ak && aS( a ) ) {
			aS( a ).style.visibility = b
		} else {
			az( "#" + a, "visibility:" + b )
		}
	}

	function ai( b ) {
		var a = /[\\\"<>\.;]/;
		var c = a.exec( b ) != null;
		return c && typeof encodeURIComponent != aq ? encodeURIComponent( b ) : b
	}

	var aR = function () {
		if ( ah.ie && ah.win ) {
			window.attachEvent( "onunload",
				function () {
					var a = al.length;
					for ( var b = 0; b < a; b++ ) {
						al[b][0].detachEvent( al[b][1], al[b][2] )
					}
					var d = ag.length;
					for ( var c = 0; c < d; c++ ) {
						aw( ag[c] )
					}
					for ( var e in ah ) {
						ah[e] = null
					}
					ah = null;
					for ( var f in swfobject ) {
						swfobject[f] = null
					}
					swfobject = null
				} )
		}
	}();
	return {
		registerObject:function ( a, e, c, b ) {
			if ( ah.w3 && a && e ) {
				var d = {};
				d.id = a;
				d.swfVersion = e;
				d.expressInstall = c;
				d.callbackFn = b;
				aG[aG.length] = d;
				ay( a, false )
			} else {
				if ( b ) {
					b( {
						success:false,
						id:a
					} )
				}
			}
		},
		getObjectById:function ( a ) {
			if ( ah.w3 ) {
				return av( a )
			}
		},
		embedSWF:function ( k, e, h, f, c, a, b, i, g, j ) {
			var d = {
				success:false,
				id:e
			};
			if ( ah.w3 && !(ah.wk && ah.wk < 312) && k && e && h && f && c ) {
				ay( e, false );
				aj( function () {
					h += "";
					f += "";
					var q = {};
					if ( g && typeof g === aD ) {
						for ( var o in g ) {
							q[o] = g[o]
						}
					}
					q.data = k;
					q.width = h;
					q.height = f;
					var n = {};
					if ( i && typeof i === aD ) {
						for ( var p in i ) {
							n[p] = i[p]
						}
					}
					if ( b && typeof b === aD ) {
						for ( var l in b ) {
							if ( typeof n.flashvars != aq ) {
								n.flashvars += "&" + l + "=" + b[l]
							} else {
								n.flashvars = l + "=" + b[l]
							}
						}
					}
					if ( ao( c ) ) {
						var m = aA( q, n, e );
						if ( q.id == e ) {
							ay( e, true )
						}
						d.success = true;
						d.ref = m
					} else {
						if ( a && au() ) {
							q.data = a;
							ae( q, n, e, j );
							return
						} else {
							ay( e, true )
						}
					}
					if ( j ) {
						j( d )
					}
				} )
			} else {
				if ( j ) {
					j( d )
				}
			}
		},
		switchOffAutoHideShow:function () {
			aI = false
		},
		ua:ah,
		getFlashPlayerVersion:function () {
			return {
				major:ah.pv[0],
				minor:ah.pv[1],
				release:ah.pv[2]
			}
		},
		hasFlashPlayerVersion:ao,
		createSWF:function ( a, b, c ) {
			if ( ah.w3 ) {
				return aA( a, b, c )
			} else {
				return undefined
			}
		},
		showExpressInstall:function ( b, a, d, c ) {
			if ( ah.w3 && au() ) {
				ae( b, a, d, c )
			}
		},
		removeSWF:function ( a ) {
			if ( ah.w3 ) {
				aw( a )
			}
		},
		createCSS:function ( b, a, c, d ) {
			if ( ah.w3 ) {
				az( b, a, c, d )
			}
		},
		addDomLoadEvent:aj,
		addLoadEvent:aC,
		getQueryParamValue:function ( b ) {
			var a = aL.location.search || aL.location.hash;
			if ( a ) {
				if ( /\?/.test( a ) ) {
					a = a.split( "?" )[1]
				}
				if ( b == null ) {
					return ai( a )
				}
				var c = a.split( "&" );
				for ( var d = 0; d < c.length; d++ ) {
					if ( c[d].substring( 0, c[d].indexOf( "=" ) ) == b ) {
						return ai( c[d].substring( (c[d].indexOf( "=" ) + 1) ) )
					}
				}
			}
			return ""
		},
		expressInstallCallback:function () {
			if ( aU ) {
				var a = aS( ac );
				if ( a && aJ ) {
					a.parentNode.replaceChild( aJ, a );
					if ( ad ) {
						ay( ad, true );
						if ( ah.ie && ah.win ) {
							aJ.style.display = "block"
						}
					}
					if ( ap ) {
						ap( at )
					}
				}
				aU = false
			}
		}
	}
}();
var SWFUpload;
if ( SWFUpload == undefined ) {
	SWFUpload = function ( b ) {
		this.initSWFUpload( b )
	}
}
SWFUpload.prototype.initSWFUpload = function ( c ) {
	try {
		this.customSettings = {};
		this.settings = c;
		this.eventQueue = [];
		this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
		this.movieElement = null;
		SWFUpload.instances[this.movieName] = this;
		this.initSettings();
		this.loadFlash();
		this.displayDebugInfo()
	} catch ( d ) {
		delete SWFUpload.instances[this.movieName];
		throw d
	}
};
SWFUpload.instances = {};
SWFUpload.movieCount = 0;
SWFUpload.version = "2.2.0 2009-03-25";
SWFUpload.QUEUE_ERROR = {
	QUEUE_LIMIT_EXCEEDED:-100,
	FILE_EXCEEDS_SIZE_LIMIT:-110,
	ZERO_BYTE_FILE:-120,
	INVALID_FILETYPE:-130
};
SWFUpload.UPLOAD_ERROR = {
	HTTP_ERROR:-200,
	MISSING_UPLOAD_URL:-210,
	IO_ERROR:-220,
	SECURITY_ERROR:-230,
	UPLOAD_LIMIT_EXCEEDED:-240,
	UPLOAD_FAILED:-250,
	SPECIFIED_FILE_ID_NOT_FOUND:-260,
	FILE_VALIDATION_FAILED:-270,
	FILE_CANCELLED:-280,
	UPLOAD_STOPPED:-290
};
SWFUpload.FILE_STATUS = {
	QUEUED:-1,
	IN_PROGRESS:-2,
	ERROR:-3,
	COMPLETE:-4,
	CANCELLED:-5
};
SWFUpload.BUTTON_ACTION = {
	SELECT_FILE:-100,
	SELECT_FILES:-110,
	START_UPLOAD:-120
};
SWFUpload.CURSOR = {
	ARROW:-1,
	HAND:-2
};
SWFUpload.WINDOW_MODE = {
	WINDOW:"window",
	TRANSPARENT:"transparent",
	OPAQUE:"opaque"
};
SWFUpload.completeURL = function ( e ) {
	if ( typeof(e) !== "string" || e.match( /^https?:\/\//i ) || e.match( /^\// ) ) {
		return e
	}
	var f = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : "");
	var d = window.location.pathname.lastIndexOf( "/" );
	if ( d <= 0 ) {
		path = "/"
	} else {
		path = window.location.pathname.substr( 0, d ) + "/"
	}
	return path + e
};
SWFUpload.prototype.initSettings = function () {
	this.ensureDefault = function ( c, d ) {
		this.settings[c] = (this.settings[c] == undefined) ? d : this.settings[c]
	};
	this.ensureDefault( "upload_url", "" );
	this.ensureDefault( "preserve_relative_urls", false );
	this.ensureDefault( "file_post_name", "Filedata" );
	this.ensureDefault( "post_params", {} );
	this.ensureDefault( "use_query_string", false );
	this.ensureDefault( "requeue_on_error", false );
	this.ensureDefault( "http_success", [] );
	this.ensureDefault( "assume_success_timeout", 0 );
	this.ensureDefault( "file_types", "*.*" );
	this.ensureDefault( "file_types_description", "All Files" );
	this.ensureDefault( "file_size_limit", 0 );
	this.ensureDefault( "file_upload_limit", 0 );
	this.ensureDefault( "file_queue_limit", 0 );
	this.ensureDefault( "flash_url", "swfupload.swf" );
	this.ensureDefault( "prevent_swf_caching", true );
	this.ensureDefault( "button_image_url", "" );
	this.ensureDefault( "button_width", 1 );
	this.ensureDefault( "button_height", 1 );
	this.ensureDefault( "button_text", "" );
	this.ensureDefault( "button_text_style", "color: #000000; font-size: 16pt;" );
	this.ensureDefault( "button_text_top_padding", 0 );
	this.ensureDefault( "button_text_left_padding", 0 );
	this.ensureDefault( "button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES );
	this.ensureDefault( "button_disabled", false );
	this.ensureDefault( "button_placeholder_id", "" );
	this.ensureDefault( "button_placeholder", null );
	this.ensureDefault( "button_cursor", SWFUpload.CURSOR.ARROW );
	this.ensureDefault( "button_window_mode", SWFUpload.WINDOW_MODE.WINDOW );
	this.ensureDefault( "debug", false );
	this.settings.debug_enabled = this.settings.debug;
	this.settings.return_upload_start_handler = this.returnUploadStart;
	this.ensureDefault( "swfupload_loaded_handler", null );
	this.ensureDefault( "file_dialog_start_handler", null );
	this.ensureDefault( "file_queued_handler", null );
	this.ensureDefault( "file_queue_error_handler", null );
	this.ensureDefault( "file_dialog_complete_handler", null );
	this.ensureDefault( "upload_start_handler", null );
	this.ensureDefault( "upload_progress_handler", null );
	this.ensureDefault( "upload_error_handler", null );
	this.ensureDefault( "upload_success_handler", null );
	this.ensureDefault( "upload_complete_handler", null );
	this.ensureDefault( "debug_handler", this.debugMessage );
	this.ensureDefault( "custom_settings", {} );
	this.customSettings = this.settings.custom_settings;
	if ( !!this.settings.prevent_swf_caching ) {
		this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf( "?" ) < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime()
	}
	if ( !this.settings.preserve_relative_urls ) {
		this.settings.upload_url = SWFUpload.completeURL( this.settings.upload_url );
		this.settings.button_image_url = SWFUpload.completeURL( this.settings.button_image_url )
	}
	delete this.ensureDefault
};
SWFUpload.prototype.loadFlash = function () {
	var d,
		c;
	if ( document.getElementById( this.movieName ) !== null ) {
		throw "ID " + this.movieName + " is already in use. The Flash Object could not be added"
	}
	d = document.getElementById( this.settings.button_placeholder_id ) || this.settings.button_placeholder;
	if ( d == undefined ) {
		throw "Could not find the placeholder element: " + this.settings.button_placeholder_id
	}
	c = document.createElement( "div" );
	c.innerHTML = this.getFlashHTML();
	d.parentNode.replaceChild( c.firstChild, d );
	if ( window[this.movieName] == undefined ) {
		window[this.movieName] = this.getMovieElement()
	}
};
SWFUpload.prototype.getFlashHTML = function () {
	return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">', '<param name="wmode" value="', this.settings.button_window_mode, '" />', '<param name="movie" value="', this.settings.flash_url, '" />', '<param name="quality" value="high" />', '<param name="menu" value="false" />', '<param name="allowScriptAccess" value="always" />', '<param name="flashvars" value="' + this.getFlashVars() + '" />', "</object>"].join( "" )
};
SWFUpload.prototype.getFlashVars = function () {
	var c = this.buildParamString();
	var d = this.settings.http_success.join( "," );
	return ["movieName=", encodeURIComponent( this.movieName ), "&amp;uploadURL=", encodeURIComponent( this.settings.upload_url ), "&amp;useQueryString=", encodeURIComponent( this.settings.use_query_string ), "&amp;requeueOnError=", encodeURIComponent( this.settings.requeue_on_error ), "&amp;httpSuccess=", encodeURIComponent( d ), "&amp;assumeSuccessTimeout=", encodeURIComponent( this.settings.assume_success_timeout ), "&amp;params=", encodeURIComponent( c ), "&amp;filePostName=", encodeURIComponent( this.settings.file_post_name ), "&amp;fileTypes=", encodeURIComponent( this.settings.file_types ), "&amp;fileTypesDescription=", encodeURIComponent( this.settings.file_types_description ), "&amp;fileSizeLimit=", encodeURIComponent( this.settings.file_size_limit ), "&amp;fileUploadLimit=", encodeURIComponent( this.settings.file_upload_limit ), "&amp;fileQueueLimit=", encodeURIComponent( this.settings.file_queue_limit ), "&amp;debugEnabled=", encodeURIComponent( this.settings.debug_enabled ), "&amp;buttonImageURL=", encodeURIComponent( this.settings.button_image_url ), "&amp;buttonWidth=", encodeURIComponent( this.settings.button_width ), "&amp;buttonHeight=", encodeURIComponent( this.settings.button_height ), "&amp;buttonText=", encodeURIComponent( this.settings.button_text ), "&amp;buttonTextTopPadding=", encodeURIComponent( this.settings.button_text_top_padding ), "&amp;buttonTextLeftPadding=", encodeURIComponent( this.settings.button_text_left_padding ), "&amp;buttonTextStyle=", encodeURIComponent( this.settings.button_text_style ), "&amp;buttonAction=", encodeURIComponent( this.settings.button_action ), "&amp;buttonDisabled=", encodeURIComponent( this.settings.button_disabled ), "&amp;buttonCursor=", encodeURIComponent( this.settings.button_cursor )].join( "" )
};
SWFUpload.prototype.getMovieElement = function () {
	if ( this.movieElement == undefined ) {
		this.movieElement = document.getElementById( this.movieName )
	}
	if ( this.movieElement === null ) {
		throw "Could not find Flash element"
	}
	return this.movieElement
};
SWFUpload.prototype.buildParamString = function () {
	var f = this.settings.post_params;
	var d = [];
	if ( typeof(f) === "object" ) {
		for ( var e in f ) {
			if ( f.hasOwnProperty( e ) ) {
				d.push( encodeURIComponent( e.toString() ) + "=" + encodeURIComponent( f[e].toString() ) )
			}
		}
	}
	return d.join( "&amp;" )
};
SWFUpload.prototype.destroy = function () {
	try {
		this.cancelUpload( null, false );
		var g = null;
		g = this.getMovieElement();
		if ( g && typeof(g.CallFunction) === "unknown" ) {
			for ( var j in g ) {
				try {
					if ( typeof(g[j]) === "function" ) {
						g[j] = null
					}
				} catch ( h ) {
				}
			}
			try {
				g.parentNode.removeChild( g )
			} catch ( f ) {
			}
		}
		window[this.movieName] = null;
		SWFUpload.instances[this.movieName] = null;
		delete SWFUpload.instances[this.movieName];
		this.movieElement = null;
		this.settings = null;
		this.customSettings = null;
		this.eventQueue = null;
		this.movieName = null;
		return true
	} catch ( i ) {
		return false
	}
};
SWFUpload.prototype.displayDebugInfo = function () {
	this.debug( ["---SWFUpload Instance Info---\n", "Version: ", SWFUpload.version, "\n", "Movie Name: ", this.movieName, "\n", "Settings:\n", "\t", "upload_url:               ", this.settings.upload_url, "\n", "\t", "flash_url:                ", this.settings.flash_url, "\n", "\t", "use_query_string:         ", this.settings.use_query_string.toString(), "\n", "\t", "requeue_on_error:         ", this.settings.requeue_on_error.toString(), "\n", "\t", "http_success:             ", this.settings.http_success.join( ", " ), "\n", "\t", "assume_success_timeout:   ", this.settings.assume_success_timeout, "\n", "\t", "file_post_name:           ", this.settings.file_post_name, "\n", "\t", "post_params:              ", this.settings.post_params.toString(), "\n", "\t", "file_types:               ", this.settings.file_types, "\n", "\t", "file_types_description:   ", this.settings.file_types_description, "\n", "\t", "file_size_limit:          ", this.settings.file_size_limit, "\n", "\t", "file_upload_limit:        ", this.settings.file_upload_limit, "\n", "\t", "file_queue_limit:         ", this.settings.file_queue_limit, "\n", "\t", "debug:                    ", this.settings.debug.toString(), "\n", "\t", "prevent_swf_caching:      ", this.settings.prevent_swf_caching.toString(), "\n", "\t", "button_placeholder_id:    ", this.settings.button_placeholder_id.toString(), "\n", "\t", "button_placeholder:       ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n", "\t", "button_image_url:         ", this.settings.button_image_url.toString(), "\n", "\t", "button_width:             ", this.settings.button_width.toString(), "\n", "\t", "button_height:            ", this.settings.button_height.toString(), "\n", "\t", "button_text:              ", this.settings.button_text.toString(), "\n", "\t", "button_text_style:        ", this.settings.button_text_style.toString(), "\n", "\t", "button_text_top_padding:  ", this.settings.button_text_top_padding.toString(), "\n", "\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n", "\t", "button_action:            ", this.settings.button_action.toString(), "\n", "\t", "button_disabled:          ", this.settings.button_disabled.toString(), "\n", "\t", "custom_settings:          ", this.settings.custom_settings.toString(), "\n", "Event Handlers:\n", "\t", "swfupload_loaded_handler assigned:  ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n", "\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n", "\t", "file_queued_handler assigned:       ", (typeof this.settings.file_queued_handler === "function").toString(), "\n", "\t", "file_queue_error_handler assigned:  ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n", "\t", "upload_start_handler assigned:      ", (typeof this.settings.upload_start_handler === "function").toString(), "\n", "\t", "upload_progress_handler assigned:   ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n", "\t", "upload_error_handler assigned:      ", (typeof this.settings.upload_error_handler === "function").toString(), "\n", "\t", "upload_success_handler assigned:    ", (typeof this.settings.upload_success_handler === "function").toString(), "\n", "\t", "upload_complete_handler assigned:   ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n", "\t", "debug_handler assigned:             ", (typeof this.settings.debug_handler === "function").toString(), "\n"].join( "" ) )
};
SWFUpload.prototype.addSetting = function ( d, f, e ) {
	if ( f == undefined ) {
		return (this.settings[d] = e)
	} else {
		return (this.settings[d] = f)
	}
};
SWFUpload.prototype.getSetting = function ( b ) {
	if ( this.settings[b] != undefined ) {
		return this.settings[b]
	}
	return ""
};
SWFUpload.prototype.callFlash = function ( functionName, argumentArray ) {
	argumentArray = argumentArray || [];
	var movieElement = this.getMovieElement();
	var returnValue,
		returnString;
	try {
		returnString = movieElement.CallFunction( '<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML( argumentArray, 0 ) + "</invoke>" );
		returnValue = eval( returnString )
	} catch ( ex ) {
		throw "Call to " + functionName + " failed"
	}
	if ( returnValue != undefined && typeof returnValue.post === "object" ) {
		returnValue = this.unescapeFilePostParams( returnValue )
	}
	return returnValue
};
SWFUpload.prototype.selectFile = function () {
	this.callFlash( "SelectFile" )
};
SWFUpload.prototype.selectFiles = function () {
	this.callFlash( "SelectFiles" )
};
SWFUpload.prototype.startUpload = function ( b ) {
	this.callFlash( "StartUpload", [b] )
};
SWFUpload.prototype.cancelUpload = function ( d, c ) {
	if ( c !== false ) {
		c = true
	}
	this.callFlash( "CancelUpload", [d, c] )
};
SWFUpload.prototype.stopUpload = function () {
	this.callFlash( "StopUpload" )
};
SWFUpload.prototype.getStats = function () {
	return this.callFlash( "GetStats" )
};
SWFUpload.prototype.setStats = function ( b ) {
	this.callFlash( "SetStats", [b] )
};
SWFUpload.prototype.getFile = function ( b ) {
	if ( typeof(b) === "number" ) {
		return this.callFlash( "GetFileByIndex", [b] )
	} else {
		return this.callFlash( "GetFile", [b] )
	}
};
SWFUpload.prototype.addFileParam = function ( e, d, f ) {
	return this.callFlash( "AddFileParam", [e, d, f] )
};
SWFUpload.prototype.removeFileParam = function ( d, c ) {
	this.callFlash( "RemoveFileParam", [d, c] )
};
SWFUpload.prototype.setUploadURL = function ( b ) {
	this.settings.upload_url = b.toString();
	this.callFlash( "SetUploadURL", [b] )
};
SWFUpload.prototype.setPostParams = function ( b ) {
	this.settings.post_params = b;
	this.callFlash( "SetPostParams", [b] )
};
SWFUpload.prototype.addPostParam = function ( d, c ) {
	this.settings.post_params[d] = c;
	this.callFlash( "SetPostParams", [this.settings.post_params] )
};
SWFUpload.prototype.removePostParam = function ( b ) {
	delete this.settings.post_params[b];
	this.callFlash( "SetPostParams", [this.settings.post_params] )
};
SWFUpload.prototype.setFileTypes = function ( d, c ) {
	this.settings.file_types = d;
	this.settings.file_types_description = c;
	this.callFlash( "SetFileTypes", [d, c] )
};
SWFUpload.prototype.setFileSizeLimit = function ( b ) {
	this.settings.file_size_limit = b;
	this.callFlash( "SetFileSizeLimit", [b] )
};
SWFUpload.prototype.setFileUploadLimit = function ( b ) {
	this.settings.file_upload_limit = b;
	this.callFlash( "SetFileUploadLimit", [b] )
};
SWFUpload.prototype.setFileQueueLimit = function ( b ) {
	this.settings.file_queue_limit = b;
	this.callFlash( "SetFileQueueLimit", [b] )
};
SWFUpload.prototype.setFilePostName = function ( b ) {
	this.settings.file_post_name = b;
	this.callFlash( "SetFilePostName", [b] )
};
SWFUpload.prototype.setUseQueryString = function ( b ) {
	this.settings.use_query_string = b;
	this.callFlash( "SetUseQueryString", [b] )
};
SWFUpload.prototype.setRequeueOnError = function ( b ) {
	this.settings.requeue_on_error = b;
	this.callFlash( "SetRequeueOnError", [b] )
};
SWFUpload.prototype.setHTTPSuccess = function ( b ) {
	if ( typeof b === "string" ) {
		b = b.replace( " ", "" ).split( "," )
	}
	this.settings.http_success = b;
	this.callFlash( "SetHTTPSuccess", [b] )
};
SWFUpload.prototype.setAssumeSuccessTimeout = function ( b ) {
	this.settings.assume_success_timeout = b;
	this.callFlash( "SetAssumeSuccessTimeout", [b] )
};
SWFUpload.prototype.setDebugEnabled = function ( b ) {
	this.settings.debug_enabled = b;
	this.callFlash( "SetDebugEnabled", [b] )
};
SWFUpload.prototype.setButtonImageURL = function ( b ) {
	if ( b == undefined ) {
		b = ""
	}
	this.settings.button_image_url = b;
	this.callFlash( "SetButtonImageURL", [b] )
};
SWFUpload.prototype.setButtonDimensions = function ( f, e ) {
	this.settings.button_width = f;
	this.settings.button_height = e;
	var d = this.getMovieElement();
	if ( d != undefined ) {
		d.style.width = f + "px";
		d.style.height = e + "px"
	}
	this.callFlash( "SetButtonDimensions", [f, e] )
};
SWFUpload.prototype.setButtonText = function ( b ) {
	this.settings.button_text = b;
	this.callFlash( "SetButtonText", [b] )
};
SWFUpload.prototype.setButtonTextPadding = function ( c, d ) {
	this.settings.button_text_top_padding = d;
	this.settings.button_text_left_padding = c;
	this.callFlash( "SetButtonTextPadding", [c, d] )
};
SWFUpload.prototype.setButtonTextStyle = function ( b ) {
	this.settings.button_text_style = b;
	this.callFlash( "SetButtonTextStyle", [b] )
};
SWFUpload.prototype.setButtonDisabled = function ( b ) {
	this.settings.button_disabled = b;
	this.callFlash( "SetButtonDisabled", [b] )
};
SWFUpload.prototype.setButtonAction = function ( b ) {
	this.settings.button_action = b;
	this.callFlash( "SetButtonAction", [b] )
};
SWFUpload.prototype.setButtonCursor = function ( b ) {
	this.settings.button_cursor = b;
	this.callFlash( "SetButtonCursor", [b] )
};
SWFUpload.prototype.queueEvent = function ( d, f ) {
	if ( f == undefined ) {
		f = []
	} else {
		if ( !(f instanceof Array) ) {
			f = [f]
		}
	}
	var e = this;
	if ( typeof this.settings[d] === "function" ) {
		this.eventQueue.push( function () {
			this.settings[d].apply( this, f )
		} );
		setTimeout( function () {
				e.executeNextEvent()
			},
			0 )
	} else {
		if ( this.settings[d] !== null ) {
			throw "Event handler " + d + " is unknown or is not a function"
		}
	}
};
SWFUpload.prototype.executeNextEvent = function () {
	var b = this.eventQueue ? this.eventQueue.shift() : null;
	if ( typeof(b) === "function" ) {
		b.apply( this )
	}
};
SWFUpload.prototype.unescapeFilePostParams = function ( l ) {
	var j = /[$]([0-9a-f]{4})/i;
	var i = {};
	var k;
	if ( l != undefined ) {
		for ( var h in l.post ) {
			if ( l.post.hasOwnProperty( h ) ) {
				k = h;
				var g;
				while ( (g = j.exec( k )) !== null ) {
					k = k.replace( g[0], String.fromCharCode( parseInt( "0x" + g[1], 16 ) ) )
				}
				i[k] = l.post[h]
			}
		}
		l.post = i
	}
	return l
};
SWFUpload.prototype.testExternalInterface = function () {
	try {
		return this.callFlash( "TestExternalInterface" )
	} catch ( b ) {
		return false
	}
};
SWFUpload.prototype.flashReady = function () {
	var b = this.getMovieElement();
	if ( !b ) {
		this.debug( "Flash called back ready but the flash movie can't be found." );
		return
	}
	this.cleanUp( b );
	this.queueEvent( "swfupload_loaded_handler" )
};
SWFUpload.prototype.cleanUp = function ( f ) {
	try {
		if ( this.movieElement && typeof(f.CallFunction) === "unknown" ) {
			this.debug( "Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)" );
			for ( var h in f ) {
				try {
					if ( typeof(f[h]) === "function" ) {
						f[h] = null
					}
				} catch ( e ) {
				}
			}
		}
	} catch ( g ) {
	}
	window.__flash__removeCallback = function ( c, b ) {
		try {
			if ( c ) {
				c[b] = null
			}
		} catch ( a ) {
		}
	}
};
SWFUpload.prototype.fileDialogStart = function () {
	this.queueEvent( "file_dialog_start_handler" )
};
SWFUpload.prototype.fileQueued = function ( b ) {
	b = this.unescapeFilePostParams( b );
	this.queueEvent( "file_queued_handler", b )
};
SWFUpload.prototype.fileQueueError = function ( e, f, d ) {
	e = this.unescapeFilePostParams( e );
	this.queueEvent( "file_queue_error_handler", [e, f, d] )
};
SWFUpload.prototype.fileDialogComplete = function ( d, f, e ) {
	this.queueEvent( "file_dialog_complete_handler", [d, f, e] )
};
SWFUpload.prototype.uploadStart = function ( b ) {
	b = this.unescapeFilePostParams( b );
	this.queueEvent( "return_upload_start_handler", b )
};
SWFUpload.prototype.returnUploadStart = function ( d ) {
	var c;
	if ( typeof this.settings.upload_start_handler === "function" ) {
		d = this.unescapeFilePostParams( d );
		c = this.settings.upload_start_handler.call( this, d )
	} else {
		if ( this.settings.upload_start_handler != undefined ) {
			throw "upload_start_handler must be a function"
		}
	}
	if ( c === undefined ) {
		c = true
	}
	c = !!c;
	this.callFlash( "ReturnUploadStart", [c] )
};
SWFUpload.prototype.uploadProgress = function ( e, f, d ) {
	e = this.unescapeFilePostParams( e );
	this.queueEvent( "upload_progress_handler", [e, f, d] )
};
SWFUpload.prototype.uploadError = function ( e, f, d ) {
	e = this.unescapeFilePostParams( e );
	this.queueEvent( "upload_error_handler", [e, f, d] )
};
SWFUpload.prototype.uploadSuccess = function ( d, e, f ) {
	d = this.unescapeFilePostParams( d );
	this.queueEvent( "upload_success_handler", [d, e, f] )
};
SWFUpload.prototype.uploadComplete = function ( b ) {
	b = this.unescapeFilePostParams( b );
	this.queueEvent( "upload_complete_handler", b )
};
SWFUpload.prototype.debug = function ( b ) {
	this.queueEvent( "debug_handler", b )
};
SWFUpload.prototype.debugMessage = function ( h ) {
	if ( this.settings.debug ) {
		var f,
			g = [];
		if ( typeof h === "object" && typeof h.name === "string" && typeof h.message === "string" ) {
			for ( var e in h ) {
				if ( h.hasOwnProperty( e ) ) {
					g.push( e + ": " + h[e] )
				}
			}
			f = g.join( "\n" ) || "";
			g = f.split( "\n" );
			f = "EXCEPTION: " + g.join( "\nEXCEPTION: " );
			SWFUpload.Console.writeLine( f )
		} else {
			SWFUpload.Console.writeLine( h )
		}
	}
};
SWFUpload.Console = {};
SWFUpload.Console.writeLine = function ( g ) {
	var e,
		f;
	try {
		e = document.getElementById( "SWFUpload_Console" );
		if ( !e ) {
			f = document.createElement( "form" );
			document.getElementsByTagName( "body" )[0].appendChild( f );
			e = document.createElement( "textarea" );
			e.id = "SWFUpload_Console";
			e.style.fontFamily = "monospace";
			e.setAttribute( "wrap", "off" );
			e.wrap = "off";
			e.style.overflow = "auto";
			e.style.width = "700px";
			e.style.height = "350px";
			e.style.margin = "5px";
			f.appendChild( e )
		}
		e.value += g + "\n";
		e.scrollTop = e.scrollHeight - e.clientHeight
	} catch ( h ) {
		alert( "Exception: " + h.name + " Message: " + h.message )
	}
};
(function ( c ) {
	var b = {
		init:function ( d, e ) {
			return this.each( function () {
				var n = c( this );
				var m = n.clone();
				var j = c.extend( {
						id:n.attr( "id" ),
						swf:"uploadify.swf",
						uploader:"uploadify.php",
						auto:false,
						buttonClass:"",
						buttonCursor:"hand",
						buttonImage:null,
						buttonText:"选择文件",
						checkExisting:false,
						debug:false,
						fileObjName:"Filedata",
						fileSizeLimit:0,
						fileTypeDesc:"All Files",
						fileTypeExts:"*.*",
						height:30,
						itemTemplate:false,
						method:"post",
						multi:true,
						formData:{},
						preventCaching:true,
						progressData:"percentage",
						queueID:false,
						queueSizeLimit:999,
						removeCompleted:false,
						removeTimeout:3,
						requeueErrors:false,
						successTimeout:30,
						uploadLimit:20,
						width:90,
						overrideEvents:[]
					},
					d );
				var g = {
					assume_success_timeout:j.successTimeout,
					button_placeholder_id:j.id,
					button_width:j.width,
					button_height:j.height,
					button_text:null,
					button_text_style:null,
					button_text_top_padding:0,
					button_text_left_padding:0,
					button_action:(j.multi ? SWFUpload.BUTTON_ACTION.SELECT_FILES : SWFUpload.BUTTON_ACTION.SELECT_FILE),
					button_disabled:false,
					button_cursor:(j.buttonCursor == "arrow" ? SWFUpload.CURSOR.ARROW : SWFUpload.CURSOR.HAND),
					button_window_mode:SWFUpload.WINDOW_MODE.TRANSPARENT,
					debug:j.debug,
					requeue_on_error:j.requeueErrors,
					file_post_name:j.fileObjName,
					file_size_limit:j.fileSizeLimit,
					file_types:j.fileTypeExts,
					file_types_description:j.fileTypeDesc,
					file_queue_limit:j.queueSizeLimit,
					file_upload_limit:j.uploadLimit,
					flash_url:j.swf,
					prevent_swf_caching:j.preventCaching,
					post_params:j.formData,
					upload_url:j.uploader,
					use_query_string:(j.method == "get"),
					file_dialog_complete_handler:a.onDialogClose,
					file_dialog_start_handler:a.onDialogOpen,
					file_queued_handler:a.onSelect,
					file_queue_error_handler:a.onSelectError,
					swfupload_loaded_handler:j.onSWFReady,
					upload_complete_handler:a.onUploadComplete,
					upload_error_handler:a.onUploadError,
					upload_progress_handler:a.onUploadProgress,
					upload_start_handler:a.onUploadStart,
					upload_success_handler:a.onUploadSuccess
				};
				if ( e ) {
					g = c.extend( g, e )
				}
				g = c.extend( g, j );
				var o = swfobject.getFlashPlayerVersion();
				var h = (o.major >= 9);
				if ( h ) {
					window["uploadify_" + j.id] = new SWFUpload( g );
					var i = window["uploadify_" + j.id];
					n.data( "uploadify", i );
					var l = c( "<div />", {
						id:j.id,
						"class":"uploadify",
						css:{
							height:j.height + "px",
							width:j.width + "px"
						}
					} );
					c( "#" + i.movieName ).wrap( l );
					l = c( "#" + j.id );
					l.data( "uploadify", i );
					var f = c( "<div />", {
						id:j.id + "-button",
						"class":"uploadify-button " + j.buttonClass
					} );
					if ( j.buttonImage ) {
						f.css( {
							"background-image":"url('" + j.buttonImage + "')",
							"text-indent":"-9999px"
						} )
					}
					f.html( '<span class="uploadify-button-text">' + j.buttonText + "</span>" ).css( {
						height:j.height + "px",
						"line-height":j.height + "px",
						width:j.width + "px"
					} );
					l.append( f );

					var tmp = {'instanceID' : j.id}
					var startupHTML = '<div class="start" style="display: none;" onclick="$(\'#${instanceID}\').uploadify(\'upload\', \'*\')">开始上传</div>';
                    startupHTML += '<div class="cancel" style="display: none;" onclick="$(\'#${instanceID}\').uploadify(\'cancel\', \'*\')">取消上传</div>';
					for (var dd in tmp) {
						startupHTML = startupHTML.replace(new RegExp('\\$\\{' + dd + '\\}', 'g'), tmp[dd]);
					}
					l.append(startupHTML);

					c( "#" + i.movieName ).css( {
						position:"absolute",
						"z-index":1
					} );
					if ( !j.queueID ) {
						var k = c( "<div />", {
							id:j.id + "-queue",
							"class":"uploadify-queue"
						} );
						l.after( k );
						i.settings.queueID = j.id + "-queue";
						i.settings.defaultQueue = true;
                        k.append( '<div class="title">\
                                    <li class="name">文件名</li>\
                                    <li class="size">大小</li>\
                                    <li class="progress">进度</li>\
                                    <li class="status">状态</li>\
									<li class="option" style="border-right-style: none; ">操作</li>\
									</div>' ).hide();
					}
					i.queueData = {
						files:{},
						filesSelected:0,
						filesQueued:0,
						filesReplaced:0,
						filesCancelled:0,
						filesErrored:0,
						uploadsSuccessful:0,
						uploadsErrored:0,
						averageSpeed:0,
						queueLength:0,
						queueSize:0,
						uploadSize:0,
						queueBytesUploaded:0,
						uploadQueue:[],
						errorMsg:"Some files were not added to the queue:"
					};
					i.original = m;
					i.wrapper = l;
					i.button = f;
					i.queue = k;
					if ( j.onInit ) {
						j.onInit.call( n, i )
					}
				} else {
					if ( j.onFallback ) {
						j.onFallback.call( n )
					}
				}
			} )
		},
		cancel:function ( d, f ) {
			var e = arguments;
			this.each( function () {
				var l = c( this ),
					i = l.data( "uploadify" ),
					j = i.settings,
					h = -1;
				if ( e[0] ) {
					if ( e[0] == "*" ) {
						var g = i.queueData.queueLength;
						c( "#" + j.queueID ).find( ".item" ).each( function () {
							h++;
							if ( e[1] === true ) {
								i.cancelUpload( c( this ).attr( "id" ), false )
							} else {
								i.cancelUpload( c( this ).attr( "id" ) )
							}
							c( this ).find( ".data" ).html( " Cancelled" );
							//c( this ).find( ".uploadify-progress-bar" ).remove();
							c( this ).delay( 1000 + 100 * h ).fadeOut( 500,
								function () {
									c( this ).remove();
								})
						} );
						i.queueData.queueSize = 0;
						i.queueData.queueLength = 0;
						if ( j.onClearQueue ) {
							j.onClearQueue.call( l, g )
						}
					} else {
						for ( var m = 0; m < e.length; m++ ) {
							i.cancelUpload( e[m] );
							c( "#" + e[m] ).find( ".data" ).html( " Cancelled" );
							//c( "#" + e[m] ).find( ".uploadify-progress-bar" ).remove();
							c( "#" + e[m] ).delay( 1000 + 100 * m ).fadeOut( 500,
								function () {
									c( this ).remove();
								})
						}
					}
				} else {
					var k = c( "#" + j.queueID ).find( ".item" ).get( 0 );
					$item = c( k );
					i.cancelUpload( $item.attr( "id" ) );
					$item.find( ".data" ).removeClass( "data" ).html( " - Cancelled" );
					$item.find( ".uploadify-progress-bar" ).remove();
                    $item.fadeOut( 500, function () {
                        c( this ).remove();
                    });
				}
                $( ".start" ).fadeOut();
                $( ".cancel" ).fadeOut();
			})
		},
		destroy:function () {
			this.each( function () {
				var f = c( this ),
					d = f.data( "uploadify" ),
					e = d.settings;
				d.destroy();
				if ( e.defaultQueue ) {
					c( "#" + e.queueID ).remove()
				}
				c( "#" + e.id ).replaceWith( d.original );
				if ( e.onDestroy ) {
					e.onDestroy.call( this )
				}
				delete d
			} )
		},
		disable:function ( d ) {
			this.each( function () {
				var g = c( this ),
					e = g.data( "uploadify" ),
					f = e.settings;
				if ( d ) {
					e.button.addClass( "disabled" );
					if ( f.onDisable ) {
						f.onDisable.call( this )
					}
				} else {
					e.button.removeClass( "disabled" );
					if ( f.onEnable ) {
						f.onEnable.call( this )
					}
				}
				e.setButtonDisabled( d )
			} )
		},
		settings:function ( e, g, h ) {
			var d = arguments;
			var f = g;
			this.each( function () {
				var k = c( this ),
					i = k.data( "uploadify" ),
					j = i.settings;
				if ( typeof(d[0]) == "object" ) {
					for ( var l in g ) {
						setData( l, g[l] )
					}
				}
				if ( d.length === 1 ) {
					f = j[e]
				} else {
					switch ( e ) {
						case "uploader":
							i.setUploadURL( g );
							break;
						case "formData":
							if ( !h ) {
								g = c.extend( j.formData, g )
							}
							i.setPostParams( j.formData );
							break;
						case "method":
							if ( g == "get" ) {
								i.setUseQueryString( true )
							} else {
								i.setUseQueryString( false )
							}
							break;
						case "fileObjName":
							i.setFilePostName( g );
							break;
						case "fileTypeExts":
							i.setFileTypes( g, j.fileTypeDesc );
							break;
						case "fileTypeDesc":
							i.setFileTypes( j.fileTypeExts, g );
							break;
						case "fileSizeLimit":
							i.setFileSizeLimit( g );
							break;
						case "uploadLimit":
							i.setFileUploadLimit( g );
							break;
						case "queueSizeLimit":
							i.setFileQueueLimit( g );
							break;
						case "buttonImage":
							i.button.css( "background-image", settingValue );
							break;
						case "buttonCursor":
							if ( g == "arrow" ) {
								i.setButtonCursor( SWFUpload.CURSOR.ARROW )
							} else {
								i.setButtonCursor( SWFUpload.CURSOR.HAND )
							}
							break;
						case "buttonText":
							c( "#" + j.id + "-button" ).find( ".uploadify-button-text" ).html( g );
							break;
						case "width":
							i.setButtonDimensions( g, j.height );
							break;
						case "height":
							i.setButtonDimensions( j.width, g );
							break;
						case "multi":
							if ( g ) {
								i.setButtonAction( SWFUpload.BUTTON_ACTION.SELECT_FILES )
							} else {
								i.setButtonAction( SWFUpload.BUTTON_ACTION.SELECT_FILE )
							}
							break
					}
					j[e] = g
				}
			} );
			if ( d.length === 1 ) {
				return f
			}
		},
		stop:function () {
			this.each( function () {
				var e = c( this ),
					d = e.data( "uploadify" );
				d.queueData.averageSpeed = 0;
				d.queueData.uploadSize = 0;
				d.queueData.bytesUploaded = 0;
				d.queueData.uploadQueue = [];
				d.stopUpload()
			} )
		},
		upload:function () {
			var d = arguments;
			this.each( function () {
				var f = c( this ),
					e = f.data( "uploadify" );
				e.queueData.averageSpeed = 0;
				e.queueData.uploadSize = 0;
				e.queueData.bytesUploaded = 0;
				e.queueData.uploadQueue = [];
				if ( d[0] ) {
					if ( d[0] == "*" ) {
						e.queueData.uploadSize = e.queueData.queueSize;
						e.queueData.uploadQueue.push( "*" );
						e.startUpload()
					} else {
						for ( var g = 0; g < d.length; g++ ) {
							e.queueData.uploadSize += e.queueData.files[d[g]].size;
							e.queueData.uploadQueue.push( d[g] )
						}
						e.startUpload( e.queueData.uploadQueue.shift() )
					}
				} else {
					e.startUpload()
				}
			} )
		}
	};
	var a = {
		onDialogOpen:function () {
			var d = this.settings;
			this.queueData.errorMsg = "Some files were not added to the queue:";
			this.queueData.filesReplaced = 0;
			this.queueData.filesCancelled = 0;
			if ( d.onDialogOpen ) {
				d.onDialogOpen.call( this )
			}
		},
		onDialogClose:function ( d, f, g ) {
			var e = this.settings;
			this.queueData.filesErrored = d - f;
			this.queueData.filesSelected = d;
			this.queueData.filesQueued = f - this.queueData.filesCancelled;
			this.queueData.queueLength = g;
			if ( c.inArray( "onDialogClose", e.overrideEvents ) < 0 ) {
				if ( this.queueData.filesErrored > 0 ) {
					alert( this.queueData.errorMsg )
				}
			}
			if ( e.onDialogClose ) {
				e.onDialogClose.call( this, this.queueData )
			}
			if ( e.auto ) {
				c( "#" + e.id ).uploadify( "upload", "*" )
			}
		},
		onSelect:function ( h ) {
			var i = this.settings;
			var f = {};
			for ( var g in this.queueData.files ) {
				f = this.queueData.files[g];
				if ( f.uploaded != true && f.name == h.name ) {
					var e = confirm( 'The file named "' + h.name + '" is already in the queue.\nDo you want to replace the existing item in the queue?' );
					if ( !e ) {
						this.cancelUpload( h.id );
						this.queueData.filesCancelled++;
						return false
					} else {
						c( "#" + f.id ).remove();
						this.cancelUpload( f.id );
						this.queueData.filesReplaced++
					}
				}
			}
			var j = Math.round( h.size / 1024 );
			var o = "KB";
			if ( j > 1000 ) {
				j = Math.round( j / 1000 );
				o = "MB"
			}
			var l = j.toString().split( "." );
			j = l[0];
			if ( l.length > 1 ) {
				j += "." + l[1].substr( 0, 2 )
			}
			j += o;
			var k = h.name;
			if ( k.length > 25 ) {
				//k = k.substr( 0, 25 ) + "..."
			}
			itemData = {
				fileID:h.id,
				instanceID:i.id,
				fileName:k,
				fileSize:j
			};
			if ( i.itemTemplate == false ) {
				i.itemTemplate = '<div id="${fileID}" class="item">\
								<li class="name" title="${fileName}">${fileName}</li>\
								<li class="size">${fileSize}</li> \
								<li class="progress"><div class="progress-bar"><div class="uploadify-progress-bar"></div></div></li>\
								<li class="data">等待上传</li>\
								<li class="img" style="display:none;"></li>\
								<li class="id" style="display:none;"></li>\
								<li class="file" style="display:none;">\
								<li class="option" style="display:none;border-right-style: none;">\
								<span title="删除" class="uploadify-del" value="#${instanceID}"></span>\
								<span title="添加到文章内容中" style="display: none;" class="uploadify-insert"></span>\
								<span title="设置为缩略图" value="0" class="uploadify-default"></span>\
								</li>\
							</div>'
			}
			if ( c.inArray( "onSelect", i.overrideEvents ) < 0 ) {
				itemHTML = i.itemTemplate;
				for ( var m in itemData ) {
					itemHTML = itemHTML.replace( new RegExp( "\\$\\{" + m + "\\}", "g" ), itemData[m] )
				}
				c( "#" + i.queueID ).append( itemHTML );
				c(".start" ).show();
                c(".cancel" ).show();
				c( "#" + i.queueID ).show();
			}

			this.queueData.queueSize += h.size;
			this.queueData.files[h.id] = h;
			if ( i.onSelect ) {
				i.onSelect.apply( this, arguments )
			}
		},
		onSelectError:function ( d, g, f ) {
			var e = this.settings;
			if ( c.inArray( "onSelectError", e.overrideEvents ) < 0 ) {
				switch ( g ) {
					case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
						if ( e.queueSizeLimit > f ) {
							this.queueData.errorMsg += "\nThe number of files selected exceeds the remaining upload limit (" + f + ")."
						} else {
							this.queueData.errorMsg += "\nThe number of files selected exceeds the queue size limit (" + e.queueSizeLimit + ")."
						}
						break;
					case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
						this.queueData.errorMsg += '\nThe file "' + d.name + '" exceeds the size limit (' + e.fileSizeLimit + ").";
						break;
					case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
						this.queueData.errorMsg += '\nThe file "' + d.name + '" is empty.';
						break;
					case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
						this.queueData.errorMsg += '\nThe file "' + d.name + '" is not an accepted file type (' + e.fileTypeDesc + ").";
						break
				}
			}
			if ( g != SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED ) {
				delete this.queueData.files[d.id]
			}
			if ( e.onSelectError ) {
				e.onSelectError.apply( this, arguments )
			}
		},
		onQueueComplete:function () {
			if ( this.settings.onQueueComplete ) {
				this.settings.onQueueComplete.call( this, this.settings.queueData )
			}
		},
		onUploadComplete:function ( f ) {
			var g = this.settings,
				d = this;
			var e = this.getStats();
            $( ".cancel" ).fadeOut();
			this.queueData.queueLength = e.files_queued;
			if ( this.queueData.uploadQueue[0] == "*" ) {
				if ( this.queueData.queueLength > 0 ) {
					this.startUpload()
				} else {
					this.queueData.uploadQueue = [];
					if ( g.onQueueComplete ) {
						g.onQueueComplete.call( this, this.queueData )
					}
				}
			} else {
				if ( this.queueData.uploadQueue.length > 0 ) {
					this.startUpload( this.queueData.uploadQueue.shift() )
				} else {
					this.queueData.uploadQueue = [];
					if ( g.onQueueComplete ) {
						g.onQueueComplete.call( this, this.queueData )
					}
				}
			}
			if ( c.inArray( "onUploadComplete", g.overrideEvents ) < 0 ) {
				if ( g.removeCompleted ) {
					switch ( f.filestatus ) {
						case SWFUpload.FILE_STATUS.COMPLETE:
							setTimeout( function () {
									if ( c( "#" + f.id ) ) {
										d.queueData.queueSize -= f.size;
										d.queueData.queueLength -= 1;
										delete d.queueData.files[f.id];
										c( "#" + f.id ).fadeOut( 500,
											function () {
												c( this ).remove()
											} )
									}
								},
								g.removeTimeout * 1000 );
							break;
						case SWFUpload.FILE_STATUS.ERROR:
							if ( !g.requeueErrors ) {
								setTimeout( function () {
										if ( c( "#" + f.id ) ) {
											d.queueData.queueSize -= f.size;
											d.queueData.queueLength -= 1;
											delete d.queueData.files[f.id];
											c( "#" + f.id ).fadeOut( 500,
												function () {
													c( this ).remove()
												} )
										}
									},
									g.removeTimeout * 1000 )
							}
							break
					}
				} else {
					f.uploaded = true
				}
			}
			if ( g.onUploadComplete ) {
				g.onUploadComplete.call( this, f )
			}
		},
		onUploadError:function ( e, i, h ) {
			var f = this.settings;
			var g = "Error";
			switch ( i ) {
				case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
					g = "HTTP Error (" + h + ")";
					break;
				case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
					g = "Missing Upload URL";
					break;
				case SWFUpload.UPLOAD_ERROR.IO_ERROR:
					g = "IO Error";
					break;
				case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
					g = "Security Error";
					break;
				case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
					alert( "The upload limit has been reached (" + h + ")." );
					g = "Exceeds Upload Limit";
					break;
				case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
					g = "Failed";
					break;
				case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
					break;
				case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
					g = "Validation Error";
					break;
				case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
					g = "Cancelled";
					this.queueData.queueSize -= e.size;
					this.queueData.queueLength -= 1;
					if ( e.status == SWFUpload.FILE_STATUS.IN_PROGRESS || c.inArray( e.id, this.queueData.uploadQueue ) >= 0 ) {
						this.queueData.uploadSize -= e.size
					}
					if ( f.onCancel ) {
						f.onCancel.call( this, e )
					}
					delete this.queueData.files[e.id];
					break;
				case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
					g = "Stopped";
					break
			}
			if ( c.inArray( "onUploadError", f.overrideEvents ) < 0 ) {
				if ( i != SWFUpload.UPLOAD_ERROR.FILE_CANCELLED && i != SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED ) {
					c( "#" + e.id ).addClass( "uploadify-error" )
				}
				c( "#" + e.id ).find( ".uploadify-progress-bar" ).css( "width", "1px" );
				if ( i != SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND && e.status != SWFUpload.FILE_STATUS.COMPLETE ) {
					c( "#" + e.id ).find( ".data" ).html( " - " + g )
				}
			}
			var d = this.getStats();
			this.queueData.uploadsErrored = d.upload_errors;
			if ( f.onUploadError ) {
				f.onUploadError.call( this, e, i, h, g )
			}
		},
		onUploadProgress:function ( g, m, j ) {
			var h = this.settings;
			var e = new Date();
			var n = e.getTime();
			var k = n - this.timer;
			if ( k > 500 ) {
				this.timer = n
			}
			var i = m - this.bytesLoaded;
			this.bytesLoaded = m;
			var d = this.queueData.queueBytesUploaded + m;
			var p = Math.round( m / j * 100 );
			var o = "KB/s";
			var l = 0;
			var f = (i / 1024) / (k / 1000);
			f = Math.floor( f * 10 ) / 10;
			if ( this.queueData.averageSpeed > 0 ) {
				this.queueData.averageSpeed = Math.floor( (this.queueData.averageSpeed + f) / 2 )
			} else {
				this.queueData.averageSpeed = Math.floor( f )
			}
			if ( f > 1000 ) {
				l = (f * 0.001);
				this.queueData.averageSpeed = Math.floor( l );
				o = "MB/s"
			}
			if ( c.inArray( "onUploadProgress", h.overrideEvents ) < 0 ) {
				/*if ( h.progressData == "percentage" ) {
					c( "#" + g.id ).find( ".data" ).html( p + "%" )
				} else {
					if ( h.progressData == "speed" && k > 500 ) {
						c( "#" + g.id ).find( ".data" ).html( this.queueData.averageSpeed + o )
					}
				}*/
				//c( "#" + g.id ).find( "i" ).html( this.queueData.averageSpeed + o );
				c( "#" + g.id ).find( ".data" ).html( p + "%" );
				c( "#" + g.id ).find( ".data" ).addClass( "none" );
				c( "#" + g.id ).find( ".uploadify-progress-bar" ).css( "width", p + "%" );
			}
			if ( h.onUploadProgress ) {
				h.onUploadProgress.call( this, g, m, j, d, this.queueData.uploadSize );
			}
		},
		onUploadStart:function ( d ) {
			var e = this.settings;
			var f = new Date();
			this.timer = f.getTime();
			this.bytesLoaded = 0;
			if ( this.queueData.uploadQueue.length == 0 ) {
				this.queueData.uploadSize = d.size
			}
            $( ".start" ).fadeOut();
			if ( e.checkExisting ) {
				c.ajax( {
					type:"POST",
					async:false,
					url:e.checkExisting,
					data:{
						filename:d.name
					},
					success:function ( h ) {
						if ( h == 1 ) {
							var g = confirm( 'A file with the name "' + d.name + '" already exists on the server.\nWould you like to replace the existing file?' );
							if ( !g ) {
								this.cancelUpload( d.id );
								c( "#" + d.id ).remove();
								if ( this.queueData.uploadQueue.length > 0 && this.queueData.queueLength > 0 ) {
									if ( this.queueData.uploadQueue[0] == "*" ) {
										this.startUpload()
									} else {
										this.startUpload( this.queueData.uploadQueue.shift() )
									}
								}
							}
						}
					}
				} )
			}
			if ( e.onUploadStart ) {
				e.onUploadStart.call( this, d )
			}
		},
		onUploadSuccess:function ( f, h, d ) {
			var g = this.settings;
			var e = this.getStats();
			this.queueData.uploadsSuccessful = e.successful_uploads;
			this.queueData.queueBytesUploaded += f.size;
			if ( c.inArray( "onUploadSuccess", g.overrideEvents ) < 0 ) {
                var obj = eval('(' + h + ')');
                if ( obj.file != 'hash' && obj.file != 'error' ) {
                    c( "#" + f.id ).find( ".data" ).removeClass( "none" );
                    c( "#" + f.id ).find( ".data" ).addClass( "success" );;
                    c( "#" + f.id ).find( ".data" ).html( '' );
                    c( "#" + f.id ).find( ".file" ).html( obj.file );
                    c( "#" + f.id ).find( ".img" ).html( obj.img );
                    c( "#" + f.id ).find( ".id" ).html( obj.id );
                    c( "#" + f.id ).find( ".data" ).attr( 'title', '完成' );
                    c( "#" + f.id ).find( ".option" ).fadeIn();
                } else {
                    c( "#" + f.id ).find( ".data" ).addClass( "failed" );
                    c( "#" + f.id ).find( ".data" ).html( obj.file + "错误" );
                    c( "#" + f.id ).find( ".uploadify-progress-bar" ).css( "width", "1px" );
                    c( "#" + f.id ).find( "i" ).html( '' );
                    c( "#" + f.id ).fadeOut( 3000, function () {
                        c( "#" + f.id ).remove();
                        c( "#upload-queue" ).fadeOut();
                    });
                }
			}
			if ( g.onUploadSuccess ) {
				g.onUploadSuccess.call( this, f, h, d )
			}
		}
	};
	c.fn.uploadify = function ( d ) {
		if ( b[d] ) {
			return b[d].apply( this, Array.prototype.slice.call( arguments, 1 ) )
		} else {
			if ( typeof d === "object" || !d ) {
				return b.init.apply( this, arguments )
			} else {
				c.error( "The method " + d + " does not exist in $.uploadify" )
			}
		}
	}
})( $ );